﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace JESAI.DistributedLock
{
    /// <summary>
    /// 分布式锁或其他同步原语的句柄。为了解锁/释放，
    /// 只需处理手柄即可。
    /// </summary>
    public interface IDistributedSynchronizationHandle : IDisposable, IAsyncDisposable
    {
        /// <summary>
        /// 获取一个<see cref="CancellationToken"/>实例，该实例可用于检测在释放句柄之前锁的句柄是否丢失。
        /// 
        /// 例如，如果锁由数据库支持，并且与数据库的连接中断，则可能会发生这种情况。
        /// 
        /// 并非所有锁类型都支持此功能；那些没有返回的将返回<see cref="CancellationToken.None"/>，这可以通过检查<see cref="CancellationToken.CanBeCanceled"/>来检测。
        /// 
        /// 对于支持此功能的锁类型，访问此属性可能会产生额外的成本，例如轮询以检测连接丢失。
        /// </summary>
        CancellationToken HandleLostToken { get; }
    }
}
